[Ajuda] Loop Do-While.

1. [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 17/06/2010 - 23:10h

Olá, pessoal.
Estou com uma dificuldade, recebi um exercício na faculdade e não consegui fazer.
Segue:
Faça um programa em C que leia um caracter do teclado sem ecoar na tela (de modo que quem digitou não consiga ver o que foi digitado) e em seguida leia uma seqüência de caracteres até que seja digitado novamente o primeiro carater lido.
Mais o professor só ensinou o básico do do-while. Ele ensinou apenas a sintaxe:
do
{
<lista de comandos>
} while (<cond>);

E no código, eu não consegui :S
Eu quebrei a cabeça aqui um pouco mais não saiu, fica ai o que eu fiz:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, tecla;
int tenso = 1;
letra = getch();
letra = toupper(letra); // Converte a letra para maiúscula.

do
{
for(tenso = -00000.1; tenso <= 9999999999999999999999999; tenso++)
{
printf("%d", tenso);
}
}
while((letra = getch()) && (letra != letra));

system("pause>nul");
return (0);
}





  


2. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 18/06/2010 - 08:48h

Sam L.,
Eu consegui melhorar meu código, olha como ficou:

char letra;
int i = 1;
letra = getch();
letra = toupper(letra);

do
{
printf("%d", i);
i++;
}
while(( i <= 999999999999) && (letra != letra));

Agora está dando problema no Loop. Quando eu uso "&&" o programa da problema no Loop, mais ou menos assim:

Letra digitada: A
1 <- Só conta até 1. Se eu digitar 'A' novamente ele fecha e se eu digitar outra letra ele vai pro 2 e assim por diante.

Quando eu uso "||" o problema fica no digito, o Loop conta normalmente mais na hora de pressionar a mesma tecla ele não fecha, mais ou menos assim:

Letra digitada: A
12345678910111213141516171819.. até 999999999999 <- Quando eu pressiono a mesma letra que foi pressionada para início do programa ele não fecha, nem pressionando outra :S

Alguém pode ajuda? '-'


3. Re: [Ajuda] Loop Do-While.

Andi
upc0d3

(usa Gentoo)

Enviado em 18/06/2010 - 13:43h

Cara tu tem um mínimo de idéia do que esta fazendo ?
Parou para pensar ? Pegou um papel e um lápis, fez teste de mesa ?
O código é muito simples de se fazer, veja uma idéia básica: Leia um único 'char', após limpe a tela (o usuário não pode ver, certo?), em seguida leia um 'char' por vez e compare com o 'char' inial.

Agora vamos ao teu código:

=================================================
#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, tecla;
int tenso = 1; /* Para que isto ? */
letra = getch(); /* Jesus amado, o usuário não é nem informado sobre o que ele esta fazendo, por que ? */

letra = toupper(letra); // Converte a letra para maiúscula.

do
{
/* O que diabos este 'for', tem que fazer ? Pra mim, este for está gritando: "Eu não sei o que eu estou fazendo."

Outra coisa, 'tenso' é uma variável INT, e não FLOAT. */

for(tenso = -00000.1; tenso <= 9999999999999999999999999; tenso++)
{
printf("%d", tenso);
}
}
/* Está errado, tu está lendo, por exemplo 'A', e está comparando com 'A'. */
while((letra = getch()) && (letra != letra));

system("pause>nul"); /* Isso não existe, e não utilize chamada de sistema, não sabe nem o básico de programação ainda. */

return (0);
}

============================================================

Tudo que eu falei no teu código esta em forma de comentário.
Meu conselho final, exclua este código, com SHIFT + DELETE (se for windows, o que eu sei que é), e comece de novo.

Até.


4. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 18/06/2010 - 15:24h

Consegui fazer :}

#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, letra2;
int i = 1;
letra = getch();
letra = toupper(letra);

do
{
printf("%d", i);
i++;
letra2 = getch();
letra2 = toupper(letra2);
}
while((i <= 1000000) && (letra2 != letra));



system("pause>nul");
return (0);
}

Upc0d3,
Sabe ler, né? Então vamos explicar para tu, lêia o exercício e depois minha explicação.

Faça um programa em C que leia um caracter do teclado sem ecoar na tela (de modo que quem digitou não consiga ver o que foi digitado) e em seguida leia uma seqüência de caracteres até que seja digitado novamente o primeiro carater lido.

letra = getch(); // Lê um caracter sem ecoar na tela *:
int i = 1; /* Váriavel que irá contar -.-" */
Naquele for eu viajei legal D:
O resto é auto explicativo :}
Ah, ja ia me esquecendo.
system("pause>nul"); /* Isso não existe aonde? Só se for no teu compilador, o meu compilador lê sem o menor problema. E antes de tu falar que eu tirei isso do orifício retal, foi meu professor de C quem aconselhou usar isso, para facilitar a leitura. */
Mesmo assim, upc0d3, valeu pelas críticas, sem críticas = sem avanço.


Valeu ai a todos,
Até a próxima '-'


5. Re: [Ajuda] Loop Do-While.

Andi
upc0d3

(usa Gentoo)

Enviado em 18/06/2010 - 21:36h

Sim, eu sei ler. E tambem sei responder.

Vamos la.
" Ah, ja ia me esquecendo.
system("pause>nul"); /* Isso não existe aonde? Só se for no teu compilador, o meu compilador lê sem o menor problema. E antes de tu falar que eu tirei isso do orifício retal, foi meu professor de C quem aconselhou usar isso, para facilitar a leitura. */ "

Se tu soubesse ler, e soubesse do que eu estou falando, nao cairia na besteira de responder a idiotice assim. Eh obvio que "system", compila, pois como eu JA disse, isto eh uma CHAMADA DE SISTEMA. O que nao existe, pelo menos, nao conheco eh este, "pause > nul". O que eu conhece eh apenas "pause".

Teu professor falou para ti usar isso ? Vou fingir que nao li isto.

Use recursos da linguagem, como tu nao teve a capacidade de pesquisar, eu lhe digo, tiro isso e coloque "getchar()".


"Mesmo assim, upc0d3, valeu pelas críticas, sem críticas = sem avanço."

Sem avanco ? Engracado, tu arrumou no codigo, a comparacao da letra com a letra, depois de eu ti dizer que estava errado. Viu a cagada do teu 'for'. Tu realmente acha que minhas criticas nao lhe ajudaram em nada ?

" letra = getch(); // Lê um caracter sem ecoar na tela *: "

Vou repetir, o usuario, NAO SABE O QUE ESTA ACONTECENDO NO PROGRAMA, TU MESMO EH CAPAZ DE RODAR TEU PROGRAMA E NAO SABER O QUE ELE FAZ. PRESTA A ATENCAO NO TEU CODIGO.

Ate.



6. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 19/06/2010 - 11:59h

" >nul" é para não aparecer a seguinte frase: Pressione qualquer tecla para continuar, blá, blá, blá.

"Sem avanco ? Engracado, tu arrumou no codigo, a comparacao da letra com a letra, depois de eu ti dizer que estava errado. Viu a cagada do teu 'for'. Tu realmente acha que minhas criticas nao lhe ajudaram em nada ?"
Tu num intendeu o que eu falei, eu disse: Sem críticas = sem avanço, ou seja, se não houver críticas construtivas a coisa não flui. Eu não falei que tu não me ajudou com suas críticas, muito pelo contrário, ajudou muito ^^

"letra = getch(); // Lê um caracter sem ecoar na tela"
E isso faz parte do exercício, ler um caracter sem ECOAR na tela.

Abrass,
Fui.